package models;

/**
 * This method provides static methods to do latitude and longitude calculations
 * @author Yaser
 */
public class Location {
	
	/**
	 * The highest possible latitude a cathedral can have to still be within a 25km radius
	 * @param lat1 Latitude
	 * @param lng1 Longitude
	 * @author Yaser
	 */
	public static Double getMaxLat(Double  lat1, Double  lng1) {
		return lat1 + getLatDiff(lat1,  lng1);
	}
	
	/**
	 * The lowest possible latitude a cathedral can have to still be within a 25km radius
	 * @param lat1 Latitude
	 * @param lng1 Longitude
	 * @author Yaser
	 */
	public static Double getMinLat(Double  lat1, Double  lng1) {
		return lat1 - getLatDiff(  lat1,  lng1);
	}
	
	/**
	 * The highest possible longitude a cathedral can have to still be within a 25km radius
	 * @param lat1 Latitude
	 * @param lng1 Longitude
	 * @author Yaser
	 */
	public static Double getMaxLon(Double  lat1, Double  lng1) {
		return lng1 + getLonDiff(lat1,  lng1);
	}
	
	/**
	 * The lowest possible longitude a cathedral can have to still be within a 25km radius
	 * @param lat1 Latitude
	 * @param lng1 Longitude
	 * @author Yaser
	 */
	public static Double getMinLon(Double  lat1, Double  lng1) {
		return lng1 - getLonDiff(lat1,  lng1);
	}
	
	/**
	 * The difference in latitude at this longitude that resembles 25km
	 * @param lat1 Latitude
	 * @param lng1 Longitude
	 * @author Yaser
	 */
	public static Double getLatDiff(Double  lat1, Double  lng1) {
		return Math.abs((1 * 25) / 110.54);
				
	 }
	
	/**
	 * The difference in longitude at this latitude that resembles 25km
	 * @param lat1 Latitude
	 * @param lng1 Longitude
	 * @author Yaser
	 */
	public static Double getLonDiff(Double  lat1, Double  lng1) {
		return Math.abs((1 * 25) / (110.54 * Math.cos(lat1) ));		
	 }
	

	
}
